home *** CD-ROM | disk | FTP | other *** search
- --------------------------------------------------------------------------------
- -- Weapon Dolphin + Projectile Dolphin
- -- Original Carnage Contest Weapon
- -- Script by DC, December 2009, www.UnrealSoftware.de
- --------------------------------------------------------------------------------
-
- -- Setup Tables
- if cc==nil then cc={} end
- cc.dolphin={}
- cc.dolphin.dolphin={}
-
- -- Load & Prepare Ressources
- cc.dolphin.gfx_wpn=loadgfx("weapons/dolphin.bmp") -- Weapon Image
- setmidhandle(cc.dolphin.gfx_wpn)
- cc.dolphin.sfx_attack=loadsfx("dolphin.ogg") -- Attack Sound
-
- --------------------------------------------------------------------------------
- -- Weapon: Dolphin
- --------------------------------------------------------------------------------
-
- cc.dolphin.id=addweapon("cc.dolphin","Flopper The Dolphin",cc.dolphin.gfx_wpn,0,2) -- Add Weapon (0 uses, first in round 2)
-
- function cc.dolphin.draw() -- Draw
- -- HUD Positioning
- if weapon_shots==0 then
- hudpositioning(pos_invisible)
- hudinfo("Click to define Flopper's target position!")
- end
- end
-
- function cc.dolphin.attack(attack) -- Attack
- if (weapon_shots<=0) and (weapon_position==1) then
- -- No more weapon switching!
- useweapon(0)
- playsound(cc.dolphin.sfx_attack)
- playsound(sfx_hitwater4)
- weapon_shots=weapon_shots+1
- -- Find closest player (to determine dolphin jump direction)
- closest=10000
- setdir=1
- players=playertable()
- for i=1,#players,1 do
- if getplayerhealth(players[i])>0 then
- dist=math.sqrt((weapon_x-getplayerx(players[i]))^2 + (weapon_y-getplayery(players[i]))^2)
- if dist<closest then
- closest=dist
- if getplayerx(players[i])>weapon_x then
- setdir=1
- else
- setdir=-1
- end
- end
- end
- end
- -- Create Dolphin
- pid=createprojectile(cc.dolphin.dolphin.id)
- projectiles[pid]={}
- if (setdir==1) then
- projectiles[pid].dir=1
- projectiles[pid].sinus=0
- else
- projectiles[pid].dir=-1
- projectiles[pid].sinus=180
- end
- projectiles[pid].x=weapon_x-90
- projectiles[pid].y=getwatery()+30
- projectiles[pid].amplitude=(getwatery()+30)-weapon_y
- if (projectiles[pid].amplitude)<100 then
- projectiles[pid].amplitude=100
- end
- if projectiles[pid].amplitude>getmapheight()+50 then
- projectiles[pid].amplitude=getmapheight()+50
- end
- projectiles[pid].speed=500.0/projectiles[pid].amplitude
- projectiles[pid].tx=projectiles[pid].x+projectiles[pid].sinus
- projectiles[pid].ty=projectiles[pid].y
- particle(p_waterhit,projectiles[pid].tx,getwatery()-30)
- -- End Turn
- endturn()
- end
- end
-
- --------------------------------------------------------------------------------
- -- Projectile: Dolphin
- --------------------------------------------------------------------------------
-
- cc.dolphin.dolphin.id=addprojectile("cc.dolphin.dolphin") -- Add Projectile
-
- function cc.dolphin.dolphin.draw(id) -- Draw
- -- Setup draw mode
- setblend(blend_alpha)
- setalpha(1)
- setcolor(255,255,255)
- -- Calculate projectile rotation
- if projectiles[id].dir==1 then
- setscale(1,1)
- setrotation(projectiles[pid].sinus)
- else
- setscale(-1,1)
- setrotation(projectiles[pid].sinus-180)
- end
- -- Draw projectile
- drawimage(cc.dolphin.gfx_wpn,projectiles[id].tx,projectiles[id].ty)
- end
-
- function cc.dolphin.dolphin.update(id) -- Update
- -- Calculate new position
- projectiles[id].sinus=projectiles[id].sinus+projectiles[id].dir*projectiles[pid].speed -- Change Sinus
- projectiles[id].tx=projectiles[id].x+projectiles[id].sinus -- New X (root + sinus)
- projectiles[id].ty=projectiles[id].y-math.sin(math.rad(projectiles[id].sinus))*projectiles[id].amplitude -- New Y (root + sin(sinus)*amplitude)
- -- Push all close players
- players=playertable()
- for i=1,#players,1 do
- if getplayerhealth(players[i])>0 then
- if math.sqrt((projectiles[id].tx-getplayerx(players[i]))^2 + (projectiles[id].ty-getplayery(players[i]))^2)<50 then
- playerpush(players[i],projectiles[id].dir*3,-3,1,1)
- end
- end
- end
- -- Free projectile?
- free=0
- if (projectiles[id].dir>0) then
- if (projectiles[id].sinus>180) then free=1 end
- else
- if (projectiles[id].sinus<0) then free=1 end
- end
- if (free==1) then
- freeprojectile(id)
- playsound(sfx_hitwater2)
- particle(p_waterhit,projectiles[id].tx,getwatery()-30)
- end
- -- Scroll to projectile
- scroll(projectiles[id].tx,projectiles[id].ty)
- end